package org.jsola.contract.web;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.contract.dto.PartySignAddDTO;
import org.jsola.contract.dto.PartySignBatchDTO;
import org.jsola.contract.dto.PartySignUpdateDTO;
import org.jsola.contract.query.PartySignQuery;
import org.jsola.contract.vo.PartySignListVO;
import org.jsola.contract.vo.PartySignVO;
import org.jsola.core.Page;
import org.jsola.core.Result;

import java.util.List;

/**
 * 合同签署方签署记录
 *
 * @author JanusMix
 */
@Api(tags = "contract-合同签署方签署记录")
public interface IPartySignControllerAPI {

    /**
     * 新增合同签署方签署记录
     * @param partySignAddDTO 合同签署方签署记录新增实体
     * @return 合同签署方签署记录展示对象
     */
    @ApiOperation(value = "新增合同签署方签署记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignAddDTO", dataType = "PartySignAddDTO", value = "新增合同签署方签署记录", paramType = "body")
    })
    Result<PartySignVO> save(PartySignAddDTO partySignAddDTO);


    /**
     * 修改合同签署方签署记录
     * @param partySignUpdateDTO 合同签署方签署记录
     * @return 更新数量
     */
    @ApiOperation(value = "修改合同签署方签署记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignUpdateDTO", dataType = "PartySignUpdateDTO", value = "修改合同签署方签署记录", paramType = "body")
    })
    Result<Integer> update(PartySignUpdateDTO partySignUpdateDTO);

    /**
     * 批量编辑、新增、删除合同签署方签署记录
     * @param partySignBatchDTO 要操作的合同签署方签署记录
     * @return 操作之后的全部合同签署方签署记录
     */
    @ApiOperation(value = "批量编辑、新增、删除合同签署方签署记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignBatchDTO", dataType = "PartySignBatchDTO", value = "要操作的字段数据", paramType = "body")
    })
    Result batch(PartySignBatchDTO partySignBatchDTO);



    /**
     * 删除单个合同签署方签署记录，彻底删除
     * @param partySignId 合同签署方签署记录id
     * @return 删除数量
     */
    @ApiOperation(value="删除单个合同签署方签署记录，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignId", dataType = "Long", value = "合同签署方签署记录id", paramType = "path")
    })
    Result<Integer> delete(Long partySignId);


    /**
     * 批量删除合同签署方签署记录，彻底删除
     * @param partySignIds 合同签署方签署记录id集合
     * @return 删除数量
     */
    @ApiOperation(value = "批量删除合同签署方签署记录，彻底删除")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignIds", dataType = "Long[]", value = "合同签署方签署记录id数组", paramType = "body" ,allowMultiple = true)
    })
    Result<Integer> deleteBatch(Long[] partySignIds);


    /**
     * 根据合同签署方签署记录id查询合同签署方签署记录详情
     * @param partySignId 合同签署方签署记录id
     * @return 合同签署方签署记录详情
     */
    @ApiOperation(value="根据合同签署方签署记录id查询合同签署方签署记录详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignId", dataType = "Long", value = "合同签署方签署记录id", paramType = "path")
    })
    Result<PartySignVO> findById(Long partySignId);


    /**
     * 查询合同签署方签署记录
     * @param partySignQuery 合同签署方签署记录查询参数
     * @return page
     */
    @ApiOperation(value="查询合同签署方签署记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignQuery", dataType = "PartySignQuery", value = "合同签署方签署记录查询参数", paramType = "query")
    })
    Result<List<PartySignListVO>> listAll(PartySignQuery partySignQuery);


     /**
     * 分页查询合同签署方签署记录
     * @param partySignQuery 合同签署方签署记录查询参数
     * @return page
     */
    @ApiOperation(value="分页查询合同签署方签署记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "partySignQuery", dataType = "PartySignQuery", value = "合同签署方签署记录查询参数", paramType = "query")
    })
    Result<Page<PartySignListVO>> page(PartySignQuery partySignQuery);

    /**
     * 根据账户id查询合同签署方签署记录
     * @param accountId 账户id
     * @return page
     */
    @ApiOperation(value="根据账户id查询合同签署方签署记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "accountId", dataType = "String", value = "账户id", paramType = "path")
    })
    Result<List<PartySignListVO>> listAllByAccountId(String accountId);


}

